<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of SemaforoAcademico
 *
 * @author MFerreira
 * @export Modules
 * @export-metadata category:Consultas:Sombreado Acad&eacute;mico
 * @export-metadata RequiredRoles:ROLE_STUDENT:ROLE_GRADUATE
 */
class SemaforoAcademico extends Module {

    private function ordenarPensum($pensums) {
        $pensumOrdenado = array();
        foreach ($pensums as /* @var $pensum Pensum */$pensum) {
            if (!isset($pensumOrdenado[$pensum->getNumeroSemestre()])) {
                $pensumOrdenado[$pensum->getNumeroSemestre()] = array();
            }
            $pensumOrdenado[$pensum->getNumeroSemestre()][] = $pensum;
        }
        ksort($pensumOrdenado);
        return $pensumOrdenado;
    }

    private function ordenarCursos($cursos) {
        $cursosOrdenados = array();
        foreach ($cursos as /* @var $curso CursosMatriculados */$curso) {
            $semestre = $curso->getCurso()->getCursoPk()->getSemestre();
            
            if (!isset($cursosOrdenados[$semestre])) {
                $cursosOrdenados[$semestre] = array();
            }
            $cursosOrdenados[$semestre][] = $curso;
        }
        ksort($cursosOrdenados);
        return $cursosOrdenados;
    }

    public function index() {
        $CodigoEstudiante = $this->currentUser->getName();

        $Aprobados = $this->model->registeredCourse->GetAprobados($CodigoEstudiante);
      
        $Todas = $this->model->syllabus->GetCurrent($CodigoEstudiante);
        $Pendientes = $this->getPendiente($Todas, $Aprobados);

        $Todas = $this->ordenarPensum($Todas);
        $Pendientes = $this->ordenarPensum($Pendientes);
        $Aprobados = $this->ordenarCursos($Aprobados);
        
        $this->assign("Todas", $Todas);
        $this->assign("Aprobadas", $Aprobados);
        $this->assign("Pendientes", $Pendientes);

        //$this->assign("Semaforo", $this->ToArray($Aprobados, $Todas));
        $this->assign("action", $this->route->action("index"));
        $this->display();
    }

    private function getPendiente($Todos, $Aprovadas) {
        $Pendientes = array();

        foreach ($Todos as $key => $Pensum) {

            $cursada = FALSE;

            foreach ($Aprovadas as $key => $Materia) {
                if ($Materia->getCurso()->getMateria()->getCodigoMateria() == $Pensum->getPensumPk()->getCodigoMateria()) {
                    $cursada = TRUE;
                }
            }

            if ($cursada == FALSE) {
                $Pendientes[] = $Pensum;
            }
        }

        return $Pendientes;
    }

}

?>
